home *** CD-ROM | disk | FTP | other *** search
/ PC Answers 1995 May / PC Answers CD-ROM 7 (Future Publishing) (May 1995).iso / vbits / code / mee / vbdao / visdata / vdmdi.frm (.txt) < prev    next >
Encoding:
Visual Basic Form  |  1994-10-06  |  41.8 KB  |  1,362 lines

  1. VERSION 2.00
  2. Begin MDIForm VDMDI 
  3.    Caption         =   "Visual Data"
  4.    ClientHeight    =   6210
  5.    ClientLeft      =   1110
  6.    ClientTop       =   1725
  7.    ClientWidth     =   12420
  8.    Height          =   6900
  9.    Icon            =   0
  10.    Left            =   1050
  11.    LinkTopic       =   "MDIForm1"
  12.    Top             =   1095
  13.    Width           =   12540
  14.    Begin PictureBox Picture1 
  15.       Align           =   2  'Align Bottom
  16.       BackColor       =   &H00C0C0C0&
  17.       Height          =   285
  18.       Left            =   0
  19.       ScaleHeight     =   255
  20.       ScaleWidth      =   12390
  21.       TabIndex        =   6
  22.       Top             =   5925
  23.       Width           =   12420
  24.       Begin CommonDialog CMD1 
  25.          Left            =   11040
  26.          Top             =   0
  27.       End
  28.       Begin Label cMsg 
  29.          BackColor       =   &H00C0C0C0&
  30.          Caption         =   "Ready"
  31.          Height          =   195
  32.          Left            =   120
  33.          TabIndex        =   7
  34.          Tag             =   "POLS"
  35.          Top             =   30
  36.          Width           =   8295
  37.       End
  38.    End
  39.    Begin PictureBox ToolBar 
  40.       Align           =   1  'Align Top
  41.       BackColor       =   &H00C0C0C0&
  42.       Height          =   360
  43.       Left            =   0
  44.       ScaleHeight     =   335.075
  45.       ScaleMode       =   0  'User
  46.       ScaleWidth      =   12413.92
  47.       TabIndex        =   0
  48.       TabStop         =   0   'False
  49.       Top             =   0
  50.       Visible         =   0   'False
  51.       Width           =   12420
  52.       Begin CheckBox cPassThru 
  53.          BackColor       =   &H00C0C0C0&
  54.          Caption         =   "PassThru"
  55.          Height          =   255
  56.          Left            =   5760
  57.          TabIndex        =   10
  58.          Top             =   30
  59.          Visible         =   0   'False
  60.          Width           =   1335
  61.       End
  62.       Begin OptionButton cTableViewSS 
  63.          BackColor       =   &H00C0C0C0&
  64.          Caption         =   "Snapshot/Grid"
  65.          Height          =   255
  66.          Left            =   4080
  67.          TabIndex        =   9
  68.          Top             =   30
  69.          Width           =   1597
  70.       End
  71.       Begin OptionButton cDataCtl 
  72.          BackColor       =   &H00C0C0C0&
  73.          Caption         =   "Data Ctrl"
  74.          Height          =   255
  75.          Left            =   80
  76.          TabIndex        =   8
  77.          Top             =   30
  78.          Value           =   -1  'True
  79.          Width           =   1095
  80.       End
  81.       Begin CommandButton BeginButton 
  82.          Caption         =   "BeginTransaction"
  83.          Height          =   330
  84.          Left            =   7200
  85.          TabIndex        =   5
  86.          Top             =   0
  87.          Width           =   1695
  88.       End
  89.       Begin CommandButton RollBackButton 
  90.          Caption         =   "Rollback"
  91.          Height          =   330
  92.          Left            =   8040
  93.          TabIndex        =   4
  94.          Top             =   0
  95.          Visible         =   0   'False
  96.          Width           =   855
  97.       End
  98.       Begin CommandButton CommitButton 
  99.          Caption         =   "Commit"
  100.          Height          =   330
  101.          Left            =   7200
  102.          TabIndex        =   3
  103.          Top             =   0
  104.          Visible         =   0   'False
  105.          Width           =   855
  106.       End
  107.       Begin OptionButton cTableView 
  108.          BackColor       =   &H00C0C0C0&
  109.          Caption         =   "Dynaset/Grid"
  110.          Height          =   255
  111.          Left            =   2596
  112.          TabIndex        =   2
  113.          Top             =   30
  114.          Width           =   1497
  115.       End
  116.       Begin OptionButton cSingleRecord 
  117.          BackColor       =   &H00C0C0C0&
  118.          Caption         =   "No Data Ctrl"
  119.          Height          =   255
  120.          Left            =   1200
  121.          TabIndex        =   1
  122.          Top             =   30
  123.          Width           =   1335
  124.       End
  125.    End
  126.    Begin Menu DBMenu 
  127.       Caption         =   "&File"
  128.       Begin Menu DBOpenMain 
  129.          Caption         =   "&Open DataBase..."
  130.          Begin Menu DBOpen 
  131.             Caption         =   "&MS Access..."
  132.             Index           =   0
  133.          End
  134.          Begin Menu DBOpen 
  135.             Caption         =   "&Dbase III..."
  136.             Index           =   1
  137.          End
  138.          Begin Menu DBOpen 
  139.             Caption         =   "Db&ase IV..."
  140.             Index           =   2
  141.          End
  142.          Begin Menu DBOpen 
  143.             Caption         =   "&FoxPro 2.0..."
  144.             Index           =   3
  145.          End
  146.          Begin Menu DBOpen 
  147.             Caption         =   "Fo&xPro 2.5..."
  148.             Index           =   4
  149.          End
  150.          Begin Menu DBOpen 
  151.             Caption         =   "&Paradox 3.X..."
  152.             Index           =   5
  153.          End
  154.          Begin Menu DBOpen 
  155.             Caption         =   "Pa&radox 4.X..."
  156.             Index           =   6
  157.          End
  158.          Begin Menu DBOpen 
  159.             Caption         =   "&Btrieve..."
  160.             Index           =   7
  161.          End
  162.          Begin Menu DBOpen 
  163.             Caption         =   "&ODBC..."
  164.             Index           =   8
  165.          End
  166.       End
  167.       Begin Menu DBClose 
  168.          Caption         =   "&Close DataBase"
  169.          Shortcut        =   ^C
  170.          Visible         =   0   'False
  171.       End
  172.       Begin Menu DBProperties 
  173.          Caption         =   "&Properties..."
  174.          Visible         =   0   'False
  175.       End
  176.       Begin Menu DBNewMain 
  177.          Caption         =   "&New..."
  178.          Begin Menu DBNew 
  179.             Caption         =   "&MS Access..."
  180.             Index           =   0
  181.          End
  182.          Begin Menu DBNew 
  183.             Caption         =   "&Dbase III..."
  184.             Index           =   1
  185.          End
  186.          Begin Menu DBNew 
  187.             Caption         =   "Db&ase IV..."
  188.             Index           =   2
  189.          End
  190.          Begin Menu DBNew 
  191.             Caption         =   "&FoxPro 2.0..."
  192.             Index           =   3
  193.          End
  194.          Begin Menu DBNew 
  195.             Caption         =   "Fo&xPro 2.5..."
  196.             Index           =   4
  197.          End
  198.          Begin Menu DBNew 
  199.             Caption         =   "&Paradox 3.X..."
  200.             Index           =   5
  201.          End
  202.          Begin Menu DBNew 
  203.             Caption         =   "Pa&radox 4.X..."
  204.             Index           =   6
  205.          End
  206.          Begin Menu DBNew 
  207.             Caption         =   "&Btrieve..."
  208.             Index           =   7
  209.          End
  210.          Begin Menu DBNew 
  211.             Caption         =   "&ODBC..."
  212.             Index           =   8
  213.          End
  214.       End
  215.       Begin Menu menubar1 
  216.          Caption         =   "-"
  217.       End
  218.       Begin Menu DBCompactDB 
  219.          Caption         =   "Co&mpact Database..."
  220.       End
  221.       Begin Menu DBRepairDB 
  222.          Caption         =   "&Repair Database..."
  223.       End
  224.       Begin Menu menubar3 
  225.          Caption         =   "-"
  226.       End
  227.       Begin Menu DBAbout 
  228.          Caption         =   "&About..."
  229.       End
  230.       Begin Menu Exit 
  231.          Caption         =   "E&xit"
  232.          Shortcut        =   ^X
  233.       End
  234.    End
  235.    Begin Menu TblMenu 
  236.       Caption         =   "&Table"
  237.       Visible         =   0   'False
  238.       Begin Menu TblRefresh 
  239.          Caption         =   "&Refresh Table List"
  240.          Shortcut        =   ^R
  241.       End
  242.       Begin Menu TblCopyStruct 
  243.          Caption         =   "&Copy..."
  244.       End
  245.       Begin Menu TblDelete 
  246.          Caption         =   "&Delete Table"
  247.          Shortcut        =   ^D
  248.       End
  249.       Begin Menu TblProperties 
  250.          Caption         =   "&Properties..."
  251.       End
  252.       Begin Menu TblAttach 
  253.          Caption         =   "&Attach..."
  254.          Visible         =   0   'False
  255.       End
  256.       Begin Menu TblZap 
  257.          Caption         =   "Remove &All Records"
  258.       End
  259.       Begin Menu TblPack 
  260.          Caption         =   "Pac&k..."
  261.          Visible         =   0   'False
  262.       End
  263.    End
  264.    Begin Menu QueryBuilder 
  265.       Caption         =   "&Query!"
  266.       Visible         =   0   'False
  267.    End
  268.    Begin Menu UtilMenu 
  269.       Caption         =   "&Utility"
  270.       Visible         =   0   'False
  271.       Begin Menu UtilCloseAll 
  272.          Caption         =   "&Close All RecordSet Forms"
  273.       End
  274.       Begin Menu UtilReplace 
  275.          Caption         =   "&Global Replace..."
  276.       End
  277.       Begin Menu UtilImportExport 
  278.          Caption         =   "&Import/Export..."
  279.       End
  280.    End
  281.    Begin Menu PrefMenu 
  282.       Caption         =   "&Preferences"
  283.       Begin Menu PrefOpenOnStartup 
  284.          Caption         =   "&Open Last DataBase on Startup"
  285.       End
  286.       Begin Menu menubar4 
  287.          Caption         =   "-"
  288.       End
  289.       Begin Menu PrefQueryTimeout 
  290.          Caption         =   "&Query Timeout Value..."
  291.       End
  292.       Begin Menu PrefLoginTimeout 
  293.          Caption         =   "&Login Timeout Value..."
  294.       End
  295.       Begin Menu PrefMaxRows 
  296.          Caption         =   "&Max Grid View Rows..."
  297.       End
  298.       Begin Menu menubar5 
  299.          Caption         =   "-"
  300.       End
  301.       Begin Menu PrefShowPerf 
  302.          Caption         =   "&Show Performance Numbers"
  303.       End
  304.       Begin Menu PrefAllowSys 
  305.          Caption         =   "&Include System Tables"
  306.       End
  307.       Begin Menu PrefDisplaySQL 
  308.          Caption         =   "&Display QueryDef SQL Text"
  309.       End
  310.    End
  311.    Begin Menu WinMenu 
  312.       Caption         =   "&Window"
  313.       Begin Menu WinTile 
  314.          Caption         =   "&Tile"
  315.       End
  316.       Begin Menu WinCascade 
  317.          Caption         =   "&Cascade"
  318.       End
  319.       Begin Menu WinArrange 
  320.          Caption         =   "&Arrange Icons"
  321.       End
  322.       Begin Menu menubar2 
  323.          Caption         =   "-"
  324.       End
  325.       Begin Menu WinTables 
  326.          Caption         =   "Ta&bles"
  327.          Shortcut        =   ^T
  328.       End
  329.       Begin Menu WinSQL 
  330.          Caption         =   "&SQL"
  331.          Shortcut        =   ^S
  332.       End
  333.    End
  334.    Begin Menu PUMMain 
  335.       Caption         =   "PopUpMenu"
  336.       Visible         =   0   'False
  337.       Begin Menu PUMDynaset 
  338.          Caption         =   "&Dynaset"
  339.       End
  340.       Begin Menu PUMTable 
  341.          Caption         =   "&Open Table"
  342.          Enabled         =   0   'False
  343.       End
  344.       Begin Menu PUMSnapshot 
  345.          Caption         =   "&Snapshot"
  346.       End
  347.       Begin Menu PUMRefAtt 
  348.          Caption         =   "&Refresh Attachment"
  349.          Enabled         =   0   'False
  350.       End
  351.       Begin Menu PUMMenubar1 
  352.          Caption         =   "-"
  353.       End
  354.       Begin Menu PUMProp 
  355.          Caption         =   "&Properties..."
  356.       End
  357.       Begin Menu PUMDesign 
  358.          Caption         =   "&Design..."
  359.       End
  360.       Begin Menu PUMDelete 
  361.          Caption         =   "De&lete"
  362.       End
  363.    End
  364. Option Explicit
  365. Option Compare Binary
  366. Sub BeginButton_Click ()
  367.   On Error GoTo BeginErr
  368.   If gCurrentDB.Transactions = False Then
  369.     Beep
  370.     MsgBox "Transactions not supported by this Driver!"
  371.     Exit Sub
  372.   End If
  373.   gCurrentDB.BeginTrans
  374.   gfDBChanged = False
  375.   gfTransPending = True
  376.   BeginButton.Visible = False
  377.   CommitButton.Visible = True
  378.   RollBackButton.Visible = True
  379.   CommitButton.SetFocus
  380.   GoTo BeginTransEnd
  381. BeginErr:
  382.   ShowError
  383.   Resume BeginTransEnd
  384. BeginTransEnd:
  385. End Sub
  386. Sub CommitButton_Click ()
  387.   On Error GoTo CommitErr
  388.   gCurrentDB.CommitTrans
  389.   gfDBChanged = False
  390.   gfTransPending = False
  391.   BeginButton.Visible = True
  392.   CommitButton.Visible = False
  393.   RollBackButton.Visible = False
  394.   BeginButton.SetFocus
  395.   GoTo DBCommitTransEnd
  396. CommitErr:
  397.   ShowError
  398.   Resume DBCommitTransEnd
  399. DBCommitTransEnd:
  400. End Sub
  401. Sub DBAbout_Click ()
  402.   MsgBar "Press any key to Close About Box", False
  403.   AboutBox.Show MODAL
  404.   MsgBar NULL_STR, False
  405. End Sub
  406. Sub DBClose_Click ()
  407.   On Error GoTo DBCloseErr
  408.   If gfDBChanged Then
  409.     If MsgBox("Data has been changed, Commit it?", MSGBOX_TYPE) = YES Then
  410.       gCurrentDB.CommitTrans
  411.       gfDBChanged = False
  412.     Else
  413.       If MsgBox("RollBack All changes?", MSGBOX_TYPE) = YES Then
  414.         gCurrentDB.Rollback
  415.         gfDBChanged = False
  416.       Else
  417.         Beep
  418.         MsgBox "Can't Close with Transactions Pending!", 48
  419.         Exit Sub
  420.       End If
  421.     End If
  422.   End If
  423.   gTableListSS.Close
  424.   CloseAllDynasets
  425.   gCurrentDB.Close
  426.   fTables.Caption = "<none>"
  427.   fTables.cTableList.Clear
  428.   fTables.TableListLabel.Caption = "Tables:"
  429.   DBProperties.Visible = False
  430.   DBClose.Visible = False
  431.   TblAttach.Visible = False
  432.   TblMenu.Visible = False
  433.   UtilMenu.Visible = False
  434.   ToolBar.Visible = False
  435.   QueryBuilder.Visible = False
  436.   gfDBOpenFlag = False
  437.   gfTransPending = False
  438.   gstDBName = NULL_STR
  439.   gstDataBase = NULL_STR
  440.   gstUserName = NULL_STR
  441.   gstPassword = NULL_STR
  442.   Unload fQuery
  443.   GoTo DBCloseEnd
  444. DBCloseErr:
  445.   ShowError
  446.   Resume DBCloseEnd
  447. DBCloseEnd:
  448. End Sub
  449. Sub DBCompactDB_Click ()
  450.    Dim oldname As String, newname As String
  451.    On Error GoTo CompactAccErr
  452.    'get file name to compact
  453.    CMD1.Filter = "Access DBs (*.mdb)|*.mdb|All Files (*.*)|*.*"
  454.    CMD1.DialogTitle = "Open MS Access Database to Compact"
  455.    CMD1.FilterIndex = 1
  456.    CMD1.Action = 1
  457.    If Len(CMD1.Filename) > 0 Then
  458.      oldname = CMD1.Filename
  459.    Else
  460.      Exit Sub
  461.    End If
  462. getname:
  463.    'get file name to compact to
  464.    CMD1.DialogTitle = "Select MS Access Database to Compact to"
  465.    CMD1.FilterIndex = 1
  466.    CMD1.Filename = NULL_STR
  467.    CMD1.Action = 2
  468.    If Len(CMD1.Filename) > 0 Then
  469.      newname = CMD1.Filename
  470.    Else
  471.      Exit Sub
  472.    End If
  473.    If Dir$(CMD1.Filename) <> "" Then
  474.      If MsgBox("Replace Existing File?", MSGBOX_TYPE) = YES Then
  475.        Kill CMD1.Filename
  476.      Else
  477.        GoTo getname
  478.      End If
  479.    End If
  480.    SetHourglass Me
  481.    MsgBar "Compacting " & oldname & " to " & newname, True
  482.    CompactDatabase oldname, newname, DB_CREATE_GENERAL, DB_VERSION10
  483.    MsgBar NULL_STR, False
  484.    ResetMouse Me
  485.    If MsgBox("Open Newly Compacted Database?", MSGBOX_TYPE) = YES Then
  486.      If gfDBOpenFlag = True Then
  487.        Call DBClose_Click
  488.      End If
  489.      gstDataType = MSACCESS
  490.      gstDBName = newname
  491.      OpenLocalDB True
  492.    End If
  493.    If gfDBOpenFlag = True Then
  494.      DBProperties.Visible = True
  495.      DBClose.Visible = True
  496.      TblMenu.Visible = True
  497.      UtilMenu.Visible = True
  498.      RefreshTables fTables.cTableList, True
  499.      fSQL.CreateQueryDefbtn.Visible = True
  500.      TblAttach.Visible = True
  501.    End If
  502.   GoTo CompactAccEnd
  503. CompactAccErr:
  504.   MsgBar NULL_STR, False
  505.   ResetMouse Me
  506.   ShowError
  507.   Resume CompactAccEnd
  508. CompactAccEnd:
  509. End Sub
  510. Sub DBNew_Click (Index As Integer)
  511.   Dim nn As String
  512.   Dim d As Database
  513.   Dim v10 As Integer
  514.   Dim driver As String
  515.   On Error GoTo NewDBErr
  516.   Select Case Index
  517.     Case 0   'access
  518.       nn = InputBox("Enter Name for New MS Access Database:")
  519.       If Len(nn) = 0 Then Exit Sub
  520.       If MsgBox("Make New Database Access 1.1 Compatible?", MSGBOX_TYPE) = YES Then
  521.         Set d = CreateDatabase(nn, DB_CREATE_GENERAL, 1)
  522.       Else
  523.         Set d = CreateDatabase(nn, DB_CREATE_GENERAL)
  524.       End If
  525.       d.Close
  526.       gstDataType = MSACCESS
  527.       gstDBName = nn
  528.       OpenLocalDB True
  529.       If gfDBOpenFlag = True Then
  530.         DBProperties.Visible = True
  531.         DBClose.Visible = True
  532.         TblMenu.Visible = True
  533.         UtilMenu.Visible = True
  534.         RefreshTables fTables.cTableList, True
  535.         fSQL.CreateQueryDefbtn.Visible = True
  536.         TblAttach.Visible = True
  537.       End If
  538.     Case 1   'dbase 3
  539.       gstDataType = DBASEIII
  540.       NewLocalISAM
  541.     Case 2   'dbase 4
  542.       gstDataType = dBASEIV
  543.       NewLocalISAM
  544.     Case 3   'fox 2.0
  545.       gstDataType = FOXPRO20
  546.       NewLocalISAM
  547.     Case 4   'fox 2.5
  548.       gstDataType = FOXPRO25
  549.       NewLocalISAM
  550.     Case 5   'paradox 3.x
  551.       gstDataType = PARADOX
  552.       NewLocalISAM
  553.     Case 6   'paradox 4.x
  554.     Case 7   'btrieve
  555.       gstDataType = BTRIEVE
  556.       NewLocalISAM
  557.     Case 8   'odbc
  558.       MsgBar "Enter New Database Parameters", False
  559.       'driver must be an valid entry in ODBCINST.INI
  560.       driver = InputBox("Enter Driver Name from ODBCINST.INI File:", "Driver Name", DEFAULTDRIVER)
  561.       RegisterDatabase NULL_STR, driver, False, NULL_STR
  562.       SendKeys "%FOO"   'force open database dialog
  563.   End Select
  564.   MsgBar NULL_STR, False
  565.   Exit Sub
  566. NewDBErr:
  567.   ShowError
  568.   Exit Sub
  569. End Sub
  570. Sub DBOpen_Click (Index As Integer)
  571.   Select Case Index
  572.     Case 0   'access
  573.       gstDataType = MSACCESS
  574.       OpenLocalDB False
  575.     Case 1   'dbase 3
  576.       gstDataType = DBASEIII
  577.       OpenLocalDB False
  578.     Case 2   'dbase 4
  579.       gstDataType = dBASEIV
  580.       OpenLocalDB False
  581.     Case 3   'fox 2.0
  582.       gstDataType = FOXPRO20
  583.       OpenLocalDB False
  584.     Case 4   'fox 2.5
  585.       gstDataType = FOXPRO25
  586.       OpenLocalDB False
  587.     Case 5   'paradox 3.x
  588.       gstDataType = PARADOX
  589.       OpenLocalDB False
  590.     Case 6   'paradox 4.x
  591.     Case 7   'btrieve
  592.       gstDataType = BTRIEVE
  593.       OpenLocalDB False
  594.     Case 8   'odbc
  595.       If gfDBOpenFlag = True Then
  596.         Call DBClose_Click
  597.       End If
  598.       If gfDBOpenFlag = True Then
  599.         Beep
  600.         MsgBox "You must Close First!", 48
  601.       Else
  602.         fOpenDB.Show MODAL
  603.       End If
  604.       If gfDBOpenFlag = True Then
  605.         DBProperties.Visible = True
  606.         DBClose.Visible = True
  607.         TblMenu.Visible = True
  608.         UtilMenu.Visible = True
  609.         RefreshTables fTables.cTableList, True
  610.         fSQL.CreateQueryDefbtn.Visible = False
  611.         TblAttach.Visible = False
  612.         cPassThru.Visible = True
  613.       End If
  614.   End Select
  615. End Sub
  616. Sub DBProperties_Click ()
  617.    Dim f As New fDataBox
  618.    Dim s As String, t As String, erm As String
  619.    Dim i As Integer
  620.    On Error GoTo PropErr
  621.    f.Caption = gCurrentDB.Name & " Properties"
  622.    f.Tag = "DB"
  623.    erm = "Name"
  624.    f.cData.AddItem "Database Name = " & gCurrentDB.Name
  625.    erm = "Connect"
  626.    f.cData.AddItem "Connect String = " & gCurrentDB.Connect
  627.    erm = "Collating Order"
  628.    f.cData.AddItem "Collating Order = " & gCurrentDB.CollatingOrder
  629.    erm = "Updatable"
  630.    f.cData.AddItem "Updatable = " & stTrueFalse((gCurrentDB.Updatable))
  631.    erm = "Transactions"
  632.    f.cData.AddItem "Transactions = " & stTrueFalse((gCurrentDB.Transactions))
  633.    erm = "QueryTimeout"
  634.    f.cData.AddItem "Query Timeout = " & gCurrentDB.QueryTimeout & " seconds"
  635.    f.Show MODAL
  636.   GoTo DBPropEnd
  637. PropErr:
  638.   f.cData.AddItem erm & ":" & Error$
  639.   Resume Next
  640. DBPropEnd:
  641. End Sub
  642. Sub DBRepairDB_Click ()
  643.    On Error GoTo RepairAccErr
  644.    Dim nn As String
  645.    'get file name to repair
  646.    CMD1.Filter = "Access DBs (*.mdb)|*.mdb|All Files (*.*)|*.*"
  647.    CMD1.DialogTitle = "Open MS Access Database to Repair"
  648.    CMD1.FilterIndex = 1
  649.    CMD1.Action = 1
  650.    If Len(CMD1.Filename) > 0 Then
  651.      nn = CMD1.Filename
  652.    Else
  653.      Exit Sub
  654.    End If
  655.    SetHourglass Me
  656.    MsgBar "Repairing " & nn, True
  657.    RepairDatabase nn
  658.    ResetMouse Me
  659.    MsgBar NULL_STR, False
  660.    If MsgBox("Open Repaired Database?", MSGBOX_TYPE) = YES Then
  661.      If gfDBOpenFlag = True Then
  662.        Call DBClose_Click
  663.      End If
  664.      gstDataType = MSACCESS
  665.      gstDBName = nn
  666.      OpenLocalDB True
  667.    End If
  668.    If gfDBOpenFlag = True Then
  669.      DBProperties.Visible = True
  670.      DBClose.Visible = True
  671.      TblMenu.Visible = True
  672.      UtilMenu.Visible = True
  673.      RefreshTables fTables.cTableList, True
  674.      fSQL.CreateQueryDefbtn.Visible = True
  675.      TblAttach.Visible = True
  676.    End If
  677.   GoTo RepairAccEnd
  678. RepairAccErr:
  679.   ResetMouse Me
  680.   MsgBar NULL_STR, False
  681.   ShowError
  682.   Resume RepairAccEnd
  683. RepairAccEnd:
  684. End Sub
  685. Sub Exit_Click ()
  686.   Unload Me
  687. End Sub
  688. Sub MDIForm_Load ()
  689.   Dim st As String
  690.   Dim x As Integer
  691.   On Error GoTo MDILErr
  692.   'write ISAM entries in INI file just in case
  693.   x = OSWritePrivateProfileString("Installable ISAMS", "Paradox 3.X", "PDX200.DLL", "VISDATA.INI")
  694.   x = OSWritePrivateProfileString("Installable ISAMS", "dBASE III", "XBS200.DLL", "VISDATA.INI")
  695.   x = OSWritePrivateProfileString("Installable ISAMS", "dBASE IV", "XBS200.DLL", "VISDATA.INI")
  696.   x = OSWritePrivateProfileString("Installable ISAMS", "FoxPro 2.0", "XBS200.DLL", "VISDATA.INI")
  697.   x = OSWritePrivateProfileString("Installable ISAMS", "FoxPro 2.5", "XBS200.DLL", "VISDATA.INI")
  698.   x = OSWritePrivateProfileString("Installable ISAMS", "Btrieve", "BTRV200.DLL", "VISDATA.INI")
  699. '  x = OSWritePrivateProfileString("dBase ISAM", "Deleted", "On", "VISDATA.INI")
  700.   'point to the VISDATA.INI file so even if you are running
  701.   'from VB, VISDATA.INI is still used
  702.   Dim tmp As String
  703.   tmp = String$(255, 32)
  704.   x = OSGetWindowsDirectory(tmp, 255)
  705.   st = Mid$(tmp, 1, x)
  706.   SetDataAccessOption 1, st & "\visdata.ini"
  707.   'login to Jet
  708.   On Error Resume Next
  709.   SetDefaultWorkspace "admin", NULL_STR
  710.   If Err = 3029 Then
  711.     LoginFrm.Show MODAL
  712.   End If
  713.   On Error GoTo MDILErr
  714.   'get INI settings
  715.   gwMaxGridRows = Val(GetINIString("MaxRows", "250"))
  716.   glQueryTimeout = Val(GetINIString("QueryTimeout", "5"))
  717.   glLoginTimeout = Val(GetINIString("LoginTimeout", "20"))
  718.   st = GetINIString("ViewMode", "Single")
  719.   If st = "Single" Then
  720.     cSingleRecord.Value = True
  721.   ElseIf st = "DataCtl" Then
  722.     cDataCtl.Value = True
  723.   ElseIf st = "DynaGrid" Then
  724.     cTableView.Value = True
  725.   Else
  726.     cTableViewSS.Value = True    'must be snap grid
  727.   End If
  728.   st = GetINIString("OpenOnStartup", "No")
  729.   If UCase(st) = "YES" Then
  730.     PrefOpenOnStartup.Checked = True
  731.   Else
  732.     PrefOpenOnStartup.Checked = False
  733.   End If
  734.   st = GetINIString("ShowPerf", "No")
  735.   If UCase(st) = "YES" Then
  736.     PrefShowPerf.Checked = True
  737.   Else
  738.     PrefShowPerf.Checked = False
  739.   End If
  740.   st = GetINIString("AllowSys", "No")
  741.   If UCase(st) = "YES" Then
  742.     PrefAllowSys.Checked = True
  743.   Else
  744.     PrefAllowSys.Checked = False
  745.   End If
  746.   st = GetINIString("DisplaySQL", "No")
  747.   If UCase(st) = "YES" Then
  748.     PrefDisplaySQL.Checked = True
  749.   Else
  750.     PrefDisplaySQL.Checked = False
  751.   End If
  752.   'get the last used database out of the INI file
  753.   gstDataType = GetINIString("DataType", NULL_STR)
  754.   gstDBName = GetINIString("Server", NULL_STR)
  755.   gstDataBase = GetINIString("DataBase", NULL_STR)
  756.   gstUserName = GetINIString("UserName", NULL_STR)
  757.   gstPassword = GetINIString("Password", NULL_STR)
  758.   cPassThru.Value = Val(GetINIString("PassThru", NULL_STR))
  759.   If PrefOpenOnStartup.Checked = True Then
  760.     If gstDataType = MSACCESS Then
  761.       SendKeys "%FOM"
  762.     ElseIf gstDataType = DBASEIII Then
  763.       SendKeys "%FOD"
  764.     ElseIf gstDataType = dBASEIV Then
  765.       SendKeys "%FOA"
  766.     ElseIf gstDataType = FOXPRO20 Then
  767.       SendKeys "%FOF"
  768.     ElseIf gstDataType = FOXPRO25 Then
  769.       SendKeys "%FOX"
  770.     ElseIf gstDataType = PARADOX Then
  771.       SendKeys "%FOP"
  772.     ElseIf gstDataType = BTRIEVE Then
  773.       SendKeys "%FOB"
  774.     ElseIf gstDataType = SQLDB Then
  775.       SendKeys "%FOO"
  776.     End If
  777.   End If
  778.   x = Val(GetINIString("WindowState", "2"))
  779.   If x <> 1 Then
  780.     WindowState = x
  781.   Else
  782.     WindowState = 0
  783.   End If
  784.   If x = 0 Then
  785.     x = Val(GetINIString("WindowLeft", "0"))
  786.     Left = x
  787.     x = Val(GetINIString("WindowTop", "0"))
  788.     Top = x
  789.     x = Val(GetINIString("WindowWidth", "9135"))
  790.     Width = x
  791.     x = Val(GetINIString("WindowHeight", "6900"))
  792.     Height = x
  793.   End If
  794.   Me.Show
  795.   'load the child forms
  796.   fTables.Show
  797.   fSQL.Show
  798.   Exit Sub
  799. MDILErr:
  800.   ShowError
  801.   End
  802. End Sub
  803. Sub MDIForm_QueryUnload (Cancel As Integer, UnloadMode As Integer)
  804.   Dim x As Integer
  805.   Dim st As String
  806.   On Error Resume Next
  807.   CRLF = Chr(13) & Chr(10)
  808.   x = OSWritePrivateProfileString("VISDATA", "DataType", gstDataType, "VISDATA.INI")
  809. '  If Len(gstDBName) > 0 Then x = OSWritePrivateProfileString("VISDATA", "Server", gstDBName, "VISDATA.INI")
  810. '  If Len(gstDatabase) > 0 Then x = OSWritePrivateProfileString("VISDATA", "DataBase", gstDatabase, "VISDATA.INI")
  811. '  If Len(gstUSerName) > 0 Then x = OSWritePrivateProfileString("VISDATA", "UserName", gstUSerName, "VISDATA.INI")
  812. '  If Len(gstPassword) > 0 Then x = OSWritePrivateProfileString("VISDATA", "Password", gstPassword, "VISDATA.INI")
  813.   x = OSWritePrivateProfileString("VISDATA", "Server", gstDBName, "VISDATA.INI")
  814.   x = OSWritePrivateProfileString("VISDATA", "DataBase", gstDataBase, "VISDATA.INI")
  815.   x = OSWritePrivateProfileString("VISDATA", "UserName", gstUserName, "VISDATA.INI")
  816.   x = OSWritePrivateProfileString("VISDATA", "Password", gstPassword, "VISDATA.INI")
  817.   If PrefOpenOnStartup.Checked = True Then
  818.     st = "Yes"
  819.   Else
  820.     st = "No"
  821.   End If
  822.   x = OSWritePrivateProfileString("VISDATA", "OpenOnStartup", st, "VISDATA.INI")
  823.   If PrefShowPerf.Checked = True Then
  824.     st = "Yes"
  825.   Else
  826.     st = "No"
  827.   End If
  828.   x = OSWritePrivateProfileString("VISDATA", "ShowPerf", st, "VISDATA.INI")
  829.   If PrefAllowSys.Checked = True Then
  830.     st = "Yes"
  831.   Else
  832.     st = "No"
  833.   End If
  834.   x = OSWritePrivateProfileString("VISDATA", "AllowSys", st, "VISDATA.INI")
  835.   If PrefDisplaySQL.Checked = True Then
  836.     st = "Yes"
  837.   Else
  838.     st = "No"
  839.   End If
  840.   x = OSWritePrivateProfileString("VISDATA", "DisplaySQL", st, "VISDATA.INI")
  841.   x = OSWritePrivateProfileString("VISDATA", "WindowState", CStr(WindowState), "VISDATA.INI")
  842.   If WindowState <> 2 Then
  843.     x = OSWritePrivateProfileString("VISDATA", "WindowTop", CStr(Top), "VISDATA.INI")
  844.     x = OSWritePrivateProfileString("VISDATA", "WindowLeft", CStr(Left), "VISDATA.INI")
  845.     x = OSWritePrivateProfileString("VISDATA", "WindowWidth", CStr(Width), "VISDATA.INI")
  846.     x = OSWritePrivateProfileString("VISDATA", "WindowHeight", CStr(Height), "VISDATA.INI")
  847.   End If
  848.   x = OSWritePrivateProfileString("VISDATA", "MaxRows", CStr(gwMaxGridRows), "VISDATA.INI")
  849.   x = OSWritePrivateProfileString("VISDATA", "QueryTimeout", CStr(glQueryTimeout), "VISDATA.INI")
  850.   x = OSWritePrivateProfileString("VISDATA", "LoginTimeout", CStr(glLoginTimeout), "VISDATA.INI")
  851.   x = OSWritePrivateProfileString("VISDATA", "PassThru", CStr(cPassThru), "VISDATA.INI")
  852.   If VDMDI.cSingleRecord = True Then
  853.     st = "Single"
  854.   ElseIf VDMDI.cDataCtl = True Then
  855.     st = "DataCtl"
  856.   ElseIf VDMDI.cTableView = True Then
  857.     st = "DynaGrid"
  858.   Else
  859.     st = "SnapGrid"
  860.   End If
  861.   x = OSWritePrivateProfileString("VISDATA", "ViewMode", st, "VISDATA.INI")
  862.   x = OSWritePrivateProfileString("VISDATA", "SQLStatement", fSQL.cSQLStatement, "VISDATA.INI")
  863.   If fSQL.WindowState <> 1 Then
  864.     x = OSWritePrivateProfileString("VISDATA", "SQLWindowTop", CStr(fSQL.Top), "VISDATA.INI")
  865.     x = OSWritePrivateProfileString("VISDATA", "SQLWindowLeft", CStr(fSQL.Left), "VISDATA.INI")
  866.     x = OSWritePrivateProfileString("VISDATA", "SQLWindowWidth", CStr(fSQL.Width), "VISDATA.INI")
  867.     x = OSWritePrivateProfileString("VISDATA", "SQLWindowHeight", CStr(fSQL.Height), "VISDATA.INI")
  868.   End If
  869.   If fTables.WindowState <> 1 Then
  870.     x = OSWritePrivateProfileString("VISDATA", "TBLWindowTop", CStr(fTables.Top), "VISDATA.INI")
  871.     x = OSWritePrivateProfileString("VISDATA", "TBLWindowLeft", CStr(fTables.Left), "VISDATA.INI")
  872.     x = OSWritePrivateProfileString("VISDATA", "TBLWindowWidth", CStr(fTables.Width), "VISDATA.INI")
  873.     x = OSWritePrivateProfileString("VISDATA", "TBLWindowHeight", CStr(fTables.Height), "VISDATA.INI")
  874.   End If
  875.   If gfDBChanged Then
  876.     If MsgBox("Data has been changed, Commit it?", MSGBOX_TYPE) = YES Then
  877.       gCurrentDB.CommitTrans
  878.     End If
  879.   End If
  880.   gTableListSS.Close
  881.   CloseAllDynasets
  882.   gCurrentDB.Close
  883.   End
  884. End Sub
  885. Sub MDIForm_Resize ()
  886.   PicOutlines Picture1, cMsg
  887. End Sub
  888. Sub NewLocalISAM ()
  889.    Dim nn As String
  890.    Dim d As Database
  891.    On Error GoTo NewISAMErr
  892.    nn = InputBox("Enter Name for New ISAM Database:")
  893.    If Len(nn) = 0 Then Exit Sub
  894.    If Mid(nn, Len(nn), 1) <> "\" Then nn = nn & "\"
  895.    MkDir Mid(nn, 1, Len(nn) - 1)
  896.    gstDBName = nn
  897.    OpenLocalDB True
  898.    If gfDBOpenFlag = True Then
  899.      DBProperties.Visible = True
  900.      DBClose.Visible = True
  901.      TblMenu.Visible = True
  902.      UtilMenu.Visible = True
  903.      RefreshTables fTables.cTableList, True
  904.      fSQL.CreateQueryDefbtn.Visible = True
  905.      TblAttach.Visible = True
  906.    End If
  907.   GoTo NewISAMEnd
  908. NewISAMErr:
  909.   If Err = 75 Then Resume Next  'catch the case where dir exists
  910.   ShowError
  911.   Resume NewISAMEnd
  912. NewISAMEnd:
  913. End Sub
  914. Sub OpenLocalDB (doit As Integer)
  915.    Dim Connect As String, DataBaseName As String
  916.    On Error GoTo OpenError
  917.    If gfDBOpenFlag = True Then
  918.      Call DBClose_Click
  919.    End If
  920.    If gfDBOpenFlag = True Then
  921.      Beep
  922.      MsgBox "You must Close First!", 48
  923.      Exit Sub
  924.    Else
  925.      Select Case gstDataType
  926.        Case MSACCESS
  927.          CMD1.Filter = "Access DBs (*.mdb)|*.mdb|All Files (*.*)|*.*"
  928.          CMD1.DialogTitle = "Open MS Access Database"
  929.        Case "dBASE III"
  930.          CMD1.Filter = "dBASE III DBs (*.dbf)|*.dbf"
  931.          CMD1.DialogTitle = "Open dBASE III Database"
  932.        Case "dBASE IV"
  933.          CMD1.Filter = "dBASE IV DBs (*.dbf)|*.dbf"
  934.          CMD1.DialogTitle = "Open dBASE IV Database"
  935.        Case "FoxPro 2.0"
  936.          CMD1.Filter = "FoxPro DBs (*.dbf)|*.dbf"
  937.          CMD1.DialogTitle = "Open FoxPro 2.0 Database"
  938.        Case "FoxPro 2.5"
  939.          CMD1.Filter = "FoxPro DBs (*.dbf)|*.dbf"
  940.          CMD1.DialogTitle = "Open FoxPro 2.5 Database"
  941.        Case "Paradox 3.X"
  942.          CMD1.Filter = "Paradox DBs (*.db)|*.db"
  943.          CMD1.DialogTitle = "Open Paradox 3.X Database"
  944.        Case "Btrieve"
  945.          CMD1.Filter = "Btrieve DBs (FILE.DDF)|FILE.DDF"
  946.          CMD1.DialogTitle = "Open Btrieve Database"
  947.      End Select
  948.      CMD1.FilterIndex = 1
  949.      CMD1.Filename = gstDBName  '""
  950.      CMD1.CancelError = True
  951.      CMD1.Flags = &H400
  952.      If doit = False Then
  953.        CMD1.Action = 1
  954.        If Len(CMD1.Filename) > 0 Then
  955.          gstDBName = CMD1.Filename
  956.        Else
  957.          Exit Sub
  958.        End If
  959.      End If
  960.    End If
  961.    MsgBar "Opening DataBase", True
  962.    SetHourglass Me
  963.    Select Case gstDataType
  964.      Case DBASEIII
  965.        Connect = "dBASE III"
  966.        DataBaseName = StripFileName(gstDBName)
  967.      Case dBASEIV
  968.        Connect = "dBASE IV"
  969.        DataBaseName = StripFileName(gstDBName)
  970.      Case FOXPRO20
  971.        Connect = "FoxPro 2.0"
  972.        DataBaseName = StripFileName(gstDBName)
  973.      Case FOXPRO25
  974.        Connect = "FoxPro 2.5"
  975.        DataBaseName = StripFileName(gstDBName)
  976.      Case PARADOX
  977.        Connect = "Paradox 3.X"
  978.        DataBaseName = StripFileName(gstDBName)
  979.      Case BTRIEVE
  980.        Connect = "Btrieve;"
  981.        DataBaseName = gstDBName
  982.      Case Else
  983.        Connect = NULL_STR
  984.        DataBaseName = gstDBName
  985.    End Select
  986.    If (CMD1.Flags And 1) = 1 Then
  987.      Set gCurrentDB = OpenDatabase(DataBaseName, False, True, Connect)
  988.    Else
  989.      Set gCurrentDB = OpenDatabase(DataBaseName, False, False, Connect)
  990.    End If
  991.    If gfDBOpenFlag = True Then
  992.      CloseAllDynasets
  993.    End If
  994.    gfTransPending = False
  995.    VDMDI.ToolBar.Visible = True
  996.    VDMDI.QueryBuilder.Visible = True
  997.    VDMDI.cPassThru.Visible = False
  998.    fTables.Caption = gstDBName
  999.    gCurrentDB.QueryTimeout = glQueryTimeout
  1000.    'success
  1001.    gfDBOpenFlag = True
  1002.    DBProperties.Visible = True
  1003.    DBClose.Visible = True
  1004.    TblMenu.Visible = True
  1005.    UtilMenu.Visible = True
  1006.    RefreshTables fTables.cTableList, True
  1007.    If gstDataType = MSACCESS Then
  1008.      fSQL.CreateQueryDefbtn.Visible = True
  1009.      TblAttach.Visible = True
  1010.      fTables.TableListLabel.Caption = "Tables/Queries:"
  1011.    Else
  1012.      TblAttach.Visible = False
  1013.      fSQL.CreateQueryDefbtn.Visible = False
  1014.    End If
  1015.    If gstDataType = DBASEIII Or gstDataType = dBASEIV Or gstDataType = FOXPRO20 Or gstDataType = FOXPRO25 Then
  1016.      TblPack.Visible = True
  1017.    Else
  1018.      TblPack.Visible = False
  1019.    End If
  1020.    ResetMouse Me
  1021.    GoTo OpenEnd
  1022. OpenError:
  1023.    ResetMouse Me
  1024.    gfDBOpenFlag = False
  1025.    gstDBName = NULL_STR
  1026.    gstDataType = NULL_STR
  1027.    gstDataBase = NULL_STR
  1028.    gstUserName = NULL_STR
  1029.    gstPassword = NULL_STR
  1030.    If Err <> 32755 Then     'check for common dialog cancelled
  1031.      ShowError
  1032.    End If
  1033.    Resume OpenEnd
  1034. OpenEnd:
  1035. End Sub
  1036. Sub PrefAllowSys_Click ()
  1037.   If PrefAllowSys.Checked = True Then
  1038.     PrefAllowSys.Checked = False
  1039.   Else
  1040.     PrefAllowSys.Checked = True
  1041.   End If
  1042.   RefreshTables fTables.cTableList, True
  1043. End Sub
  1044. Sub PrefDisplaySQL_Click ()
  1045.   If PrefDisplaySQL.Checked = True Then
  1046.     PrefDisplaySQL.Checked = False
  1047.   Else
  1048.     PrefDisplaySQL.Checked = True
  1049.   End If
  1050. End Sub
  1051. Sub PrefLoginTimeout_Click ()
  1052.   On Error GoTo LTErr
  1053.   Dim nval As String
  1054.   nval = InputBox("Login Timeout is currently " & glLoginTimeout & " seconds." & CRLF & "Enter New Value:")
  1055.   If Len(nval) = 0 Then Exit Sub
  1056.   'try to set the new value
  1057.   If Val(nval) >= 0 Then
  1058.     glLoginTimeout = Val(nval)
  1059.   End If
  1060.   GoTo LTEnd
  1061. LTErr:
  1062.   ShowError
  1063.   Resume LTEnd
  1064. LTEnd:
  1065. End Sub
  1066. Sub PrefMaxRows_Click ()
  1067.   Dim st As String
  1068.   Dim CR As String
  1069.   MsgBar "Enter Maximum Rows to Show in Grid", False
  1070.   st = InputBox("Enter New Value:", "Max Grid View Rows", CStr(gwMaxGridRows))
  1071.   If Len(st) > 0 Then
  1072.     If Val(st) > MAX_GRID_ROWS Then
  1073.       MsgBox "Maximum Rows is " & CStr(MAX_GRID_ROWS), 48
  1074.       gwMaxGridRows = MAX_GRID_ROWS
  1075.     ElseIf Val(st) = 0 Then
  1076.       MsgBox "Minimum Rows is 1.", 48
  1077.       gwMaxGridRows = 1
  1078.     Else
  1079.       gwMaxGridRows = Val(st)
  1080.     End If
  1081.   End If
  1082.   MsgBar NULL_STR, False
  1083. End Sub
  1084. Sub PrefOpenOnStartup_Click ()
  1085.   'toggle the menu item
  1086.   If PrefOpenOnStartup.Checked = True Then
  1087.     PrefOpenOnStartup.Checked = False
  1088.   Else
  1089.     PrefOpenOnStartup.Checked = True
  1090.   End If
  1091. End Sub
  1092. Sub PrefQueryTimeout_Click ()
  1093.   On Error GoTo QTErr
  1094.   Dim nval As String
  1095.   nval = InputBox("Query Timeout is currently " & gCurrentDB.QueryTimeout & " seconds." & CRLF & "Enter New Value:")
  1096.   If Len(nval) = 0 Then Exit Sub
  1097.   'try to set the new value
  1098.   gCurrentDB.QueryTimeout = Val(nval)
  1099.   glQueryTimeout = Val(nval)
  1100.   GoTo QTEnd
  1101. QTErr:
  1102.   ShowError
  1103.   'reset the form control after the error
  1104.   glQueryTimeout = gCurrentDB.QueryTimeout
  1105.   Resume QTEnd
  1106. QTEnd:
  1107. End Sub
  1108. Sub PrefShowPerf_Click ()
  1109.   If PrefShowPerf.Checked = True Then
  1110.     PrefShowPerf.Checked = False
  1111.   Else
  1112.     PrefShowPerf.Checked = True
  1113.   End If
  1114. End Sub
  1115. Sub QueryBuilder_Click ()
  1116.   fQuery.WindowState = 0
  1117. End Sub
  1118. Sub RollBackButton_Click ()
  1119.   On Error GoTo RollbackErr
  1120.   If MsgBox("All changes will be gone, Rollback anyway?", MSGBOX_TYPE) = YES Then
  1121.     gCurrentDB.Rollback
  1122.     gfDBChanged = False
  1123.     gfTransPending = False
  1124.     BeginButton.Visible = True
  1125.     CommitButton.Visible = False
  1126.     RollBackButton.Visible = False
  1127.     BeginButton.SetFocus
  1128.   End If
  1129.   GoTo DBRollbackEnd
  1130. RollbackErr:
  1131.   ShowError
  1132.   Resume DBRollbackEnd
  1133. DBRollbackEnd:
  1134. End Sub
  1135. Sub RptDesign_Click ()
  1136. '  On Error GoTo RDErr
  1137. '  Dim ret
  1138. '  If Dir$("\vb\report\crw.exe") = NULL_STR Then
  1139. '    CMD1.Filter = "Crystal Report Designer (CRW.EXE)|CRW.EXE"
  1140. '    CMD1.Action = 1
  1141. '    If Len(CMD1.Filename) = 0 Then Exit Sub
  1142. '    ret = Shell(CMD1.Filename, 4)
  1143. '  Else
  1144. '    ret = Shell("\vb\report\crw.exe", 4)
  1145. '  End If
  1146. '  Exit Sub
  1147. 'RDErr:
  1148. '  ShowError
  1149. '  Exit Sub
  1150. End Sub
  1151. Sub RptRun_Click ()
  1152. '  On Error GoTo RRErr
  1153. '  CMD1.Filter = "Report Files (*.RPT)|*.RPT"
  1154. '  CMD1.Action = 1
  1155. '  If Len(CMD1.Filename) = 0 Then Exit Sub
  1156. '  If gstDataType = "ODBC" Then
  1157. '    Report1.Connect = InputBox("Enter Connect String if necessary:")
  1158. '  End If
  1159. '  Report1.ReportFileName = CMD1.Filename
  1160. '  Report1.Action = 1
  1161. '  Exit Sub
  1162. 'RRErr:
  1163. '  ShowError
  1164. '  Exit Sub
  1165. End Sub
  1166. Sub TblAttach_Click ()
  1167.   fAttach.Show MODAL
  1168. End Sub
  1169. Sub TblCopyStruct_Click ()
  1170.   fCpyStru.Show MODAL
  1171. End Sub
  1172. Sub TblDelete_Click ()
  1173.   On Error GoTo TblDelErr
  1174.   If Len(fTables.cTableList.Text) = 0 Then
  1175.     MsgBox "No Table Selected", 48
  1176.     Exit Sub
  1177.   End If
  1178.   If MsgBox("Delete """ & fTables.cTableList & """ table?", MSGBOX_TYPE) = YES Then
  1179.     If TableType((fTables.cTableList)) = DB_QUERYDEF Then
  1180.       gCurrentDB.DeleteQueryDef (fTables.cTableList)
  1181.     Else
  1182.       gCurrentDB.TableDefs.Delete gCurrentDB.TableDefs(fTables.cTableList)
  1183.     End If
  1184.     fTables.cTableList.RemoveItem fTables.cTableList.ListIndex
  1185.   End If
  1186.   GoTo TblDelEnd
  1187. TblDelErr:
  1188.   ShowError
  1189.   Resume TblDelEnd
  1190. TblDelEnd:
  1191. End Sub
  1192. Sub TblPack_Click ()
  1193.   Dim ts As String, i As Integer
  1194.   ReDim idxs(0) As Index
  1195.   If Len(fTables.cTableList.Text) = 0 Then
  1196.     MsgBox "No Table Selected", 48
  1197.     Exit Sub
  1198.   End If
  1199.   On Error GoTo PackErr
  1200.   If MsgBox("Remove All Deleted Records in " & fTables.cTableList & "?", MSGBOX_TYPE) = YES Then
  1201.     SetHourglass Me
  1202.     MsgBar "Packing '" & fTables.cTableList & "'", True
  1203.     ts = gCurrentDB.Name & "\"
  1204.     If Dir$(ts & "p_a_c_k.db?") <> NULL_STR Then
  1205.       Kill ts & "p_a_c_k.db?"
  1206.     End If
  1207.     For i = 0 To gCurrentDB.TableDefs(fTables.cTableList).Indexes.Count - 1
  1208.       ReDim Preserve idxs(i + 1)
  1209.       Set idxs(i) = New Index
  1210.       idxs(i).Name = gCurrentDB.TableDefs(fTables.cTableList).Indexes(i).Name
  1211.       idxs(i).Fields = gCurrentDB.TableDefs(fTables.cTableList).Indexes(i).Fields
  1212.       idxs(i).Primary = gCurrentDB.TableDefs(fTables.cTableList).Indexes(i).Primary
  1213.       idxs(i).Unique = gCurrentDB.TableDefs(fTables.cTableList).Indexes(i).Unique
  1214.     Next
  1215.     gCurrentDB.Execute "Select * into p_a_c_k from " & fTables.cTableList
  1216.     gCurrentDB.TableDefs.Delete fTables.cTableList
  1217.     Name ts & "p_a_c_k.dbf" As ts + fTables.cTableList & ".dbf"
  1218.     If Dir$(ts & "p_a_c_k.dbt") <> NULL_STR Then
  1219.       Name ts & "p_a_c_k.dbt" As ts + fTables.cTableList & ".dbt"
  1220.     End If
  1221.     gCurrentDB.TableDefs.Refresh
  1222.     For i = 0 To UBound(idxs) - 1
  1223.       gCurrentDB.TableDefs(fTables.cTableList).Indexes.Append idxs(i)
  1224.     Next
  1225.     MsgBox "'" & fTables.cTableList & "' successfully Packed!", 48
  1226.   End If
  1227.   ResetMouse Me
  1228.   MsgBar "", False
  1229.   GoTo PackEnd
  1230. PackErr:
  1231.   ResetMouse Me
  1232.   MsgBar "", False
  1233.   ShowError
  1234.   Resume PackEnd
  1235. PackEnd:
  1236. End Sub
  1237. Sub TblProperties_Click ()
  1238.    Dim f As New fDataBox
  1239.    Dim erm As String
  1240.    Dim tt As Integer
  1241.    Dim qt As String
  1242.    Dim qd As QueryDef
  1243.    If Len(fTables.cTableList.Text) = 0 Then
  1244.      MsgBox "No Table Selected", 48
  1245.      Exit Sub
  1246.    End If
  1247.    On Error GoTo TblPropErr
  1248.    f.Caption = fTables.cTableList & " Properties"
  1249.    tt = TableType((fTables.cTableList))
  1250.    If tt = DB_QUERYDEF Then
  1251.      f.cData.AddItem "Table Type = QueryDef"
  1252.    ElseIf tt = DB_ATTACHEDTABLE Then
  1253.      f.cData.AddItem "Table Type = Attached Table"
  1254.    ElseIf tt = DB_ATTACHEDODBC Then
  1255.      f.cData.AddItem "Table Type = Attached ODBC Table"
  1256.    Else
  1257.      f.cData.AddItem "Table Type = Table"
  1258.    End If
  1259.    If tt = DB_QUERYDEF Then
  1260.      f.Tag = "QD"
  1261.      Set gCurrentQueryDef = gCurrentDB.OpenQueryDef(fTables.cTableList)
  1262.      erm = "Name"
  1263.      f.cData.AddItem "QueryDef Name = " & gCurrentQueryDef.Name
  1264.      erm = "SQL"
  1265.      f.cData.AddItem "SQL = " & gCurrentQueryDef.SQL
  1266.      qt = ActionQueryType((fTables.cTableList))
  1267.      If Len(qt) > 0 Then
  1268.        f.cData.AddItem "Action Query Type = " & qt
  1269.      End If
  1270.      f.Show MODAL
  1271.      gCurrentQueryDef.Close
  1272.    Else
  1273.      f.Tag = "TBD"
  1274.      erm = "Name"
  1275.      f.cData.AddItem "Table Name = " & gCurrentDB.TableDefs(fTables.cTableList).Name
  1276.      erm = "Date Created"
  1277.      f.cData.AddItem "Date Created = " & gCurrentDB.TableDefs(fTables.cTableList).DateCreated
  1278.      erm = "Last Updated"
  1279.      f.cData.AddItem "Last Updated = " & gCurrentDB.TableDefs(fTables.cTableList).LastUpdated
  1280.      erm = "Updatable"
  1281.      f.cData.AddItem "Updatable = " & stTrueFalse((gCurrentDB.TableDefs(fTables.cTableList).Updatable))
  1282.      erm = "Connect"
  1283.      f.cData.AddItem "Connect String = " & gCurrentDB.TableDefs(fTables.cTableList).Connect
  1284.      erm = "Source Table Name"
  1285.      f.cData.AddItem "Source Table Name = " & gCurrentDB.TableDefs(fTables.cTableList).SourceTableName
  1286.      erm = "Attributes"
  1287.      f.cData.AddItem "Attributes = &H" & Hex(gCurrentDB.TableDefs(fTables.cTableList).Attributes)
  1288.      f.Show MODAL
  1289.    End If
  1290.   GoTo TblPropEnd
  1291. TblPropErr:
  1292.   f.cData.AddItem erm & ":" & Error$
  1293.   Resume Next
  1294. TblPropEnd:
  1295. End Sub
  1296. Sub TblRefresh_Click ()
  1297.   gCurrentDB.TableDefs.Refresh
  1298.   RefreshTables fTables.cTableList, True
  1299. End Sub
  1300. Sub TblZap_Click ()
  1301.   Dim RetSQL As Long
  1302.   If Len(fTables.cTableList.Text) = 0 Then
  1303.     MsgBox "No Table Selected", 48
  1304.     Exit Sub
  1305.   End If
  1306.   On Error GoTo ZapErr
  1307.   If MsgBox("Delete All Records in " & fTables.cTableList & "?", MSGBOX_TYPE) = YES Then
  1308.     'delete all rows with a sql statement
  1309.     If gstDataType = SQLDB Then
  1310.       RetSQL = gCurrentDB.ExecuteSQL("delete from " & fTables.cTableList)
  1311.       If RetSQL > 0 Then
  1312.         MsgBox CStr(RetSQL) & " rows deleted!", 48
  1313.         If gfTransPending Then gfDBChanged = True
  1314.       End If
  1315.     Else
  1316.       gCurrentDB.Execute ("delete from " & fTables.cTableList)
  1317.     End If
  1318.   End If
  1319.   GoTo ZapEnd
  1320. ZapErr:
  1321.   If Err = EOF_ERR Then Resume Next
  1322.   ShowError
  1323.   Resume ZapEnd
  1324. ZapEnd:
  1325. End Sub
  1326. Sub UtilCloseAll_Click ()
  1327.   CloseAllDynasets
  1328. End Sub
  1329. Sub UtilImportExport_Click ()
  1330.   VBIMEX.Show MODAL
  1331. End Sub
  1332. Sub UtilReplace_Click ()
  1333.   Dim i As Integer
  1334.   Dim sb As String
  1335.   On Error GoTo ReplaceErr
  1336.   RefreshTables fReplace.cTableList, False
  1337.   fReplace.Show MODAL
  1338.   GoTo ReplaceEnd
  1339. ReplaceErr:
  1340.   ShowError
  1341.   Resume ReplaceEnd
  1342. ReplaceEnd:
  1343. End Sub
  1344. Sub WinArrange_Click ()
  1345.   Me.Arrange 3
  1346. End Sub
  1347. Sub WinCascade_Click ()
  1348.   Me.Arrange 0
  1349. End Sub
  1350. Sub WinSQL_Click ()
  1351.   fSQL.WindowState = 0
  1352. End Sub
  1353. Sub WinTables_Click ()
  1354.   fTables.WindowState = 0
  1355.   If fTables.cTableList.ListCount = 0 And gfDBOpenFlag = True Then
  1356.     RefreshTables fTables.cTableList, True
  1357.   End If
  1358. End Sub
  1359. Sub WinTile_Click ()
  1360.   Me.Arrange 2
  1361. End Sub
  1362.